LINQ (Language Integrated Query) শুধু ডেটাবেস বা DataTable এর জন্য নয়, বরং Custom Object Collections এর উপরও কার্যকরীভাবে ব্যবহার করা যায়। যখন আপনার নিজের তৈরি করা ক্লাসের অবজেক্টগুলোর একটি কোলেকশন থাকে, তখন LINQ ব্যবহার করে সেই কোলেকশনের উপর কুয়েরি চালানো খুবই সহজ হয়। এটি একটি শক্তিশালী পদ্ধতি, যা আপনাকে List, Array, Dictionary এবং অন্যান্য কোলেকশনের উপর কুয়েরি চালানোর অনুমতি দেয়।
এখানে Custom Object Collection হিসেবে একটি ক্লাস তৈরি করা হবে, তারপরে LINQ ব্যবহার করে সেই কোলেকশনের উপর কুয়েরি করা হবে।
ধরা যাক, আমরা একটি Product
ক্লাস তৈরি করব এবং তার একটি List (কোলেকশন) ব্যবহার করব, যেখানে বিভিন্ন পণ্যের তথ্য থাকবে। তারপর LINQ ব্যবহার করে আমরা সেই কোলেকশনের উপর কুয়েরি চালাবো।
using System;
using System.Collections.Generic;
using System.Linq;
class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
public Product(int productId, string productName, string category, decimal price)
{
ProductID = productId;
ProductName = productName;
Category = category;
Price = price;
}
}
class Program
{
static void Main()
{
// Custom Object Collection (List of Products)
List<Product> products = new List<Product>
{
new Product(1, "Product1", "Category1", 20.5m),
new Product(2, "Product2", "Category1", 30.0m),
new Product(3, "Product3", "Category2", 15.5m),
new Product(4, "Product4", "Category2", 25.0m),
new Product(5, "Product5", "Category1", 12.0m)
};
// LINQ কুয়েরি: Price 20 এর বেশি পণ্য বের করা
var expensiveProducts = from product in products
where product.Price > 20
select product;
// ফলাফল প্রিন্ট করা
foreach (var product in expensiveProducts)
{
Console.WriteLine($"Product: {product.ProductName}, Category: {product.Category}, Price: {product.Price}");
}
}
}
আউটপুট:
Product: Product2, Category: Category1, Price: 30
Product: Product4, Category: Category2, Price: 25
এখানে Product ক্লাসের একটি কোলেকশন তৈরি করা হয়েছে, এবং LINQ ব্যবহার করে ২০ এর বেশি মূল্যের পণ্যগুলো বের করা হয়েছে।
এখানে Category
অনুসারে পণ্যগুলো গ্রুপ করা হয়েছে।
var groupedProducts = from product in products
group product by product.Category into productGroup
select new
{
Category = productGroup.Key,
Products = productGroup
};
foreach (var group in groupedProducts)
{
Console.WriteLine($"Category: {group.Category}");
foreach (var product in group.Products)
{
Console.WriteLine($" - {product.ProductName}, Price: {product.Price}");
}
}
আউটপুট:
Category: Category1
- Product1, Price: 20.5
- Product2, Price: 30
- Product5, Price: 12
Category: Category2
- Product3, Price: 15.5
- Product4, Price: 25
এখানে Category অনুসারে পণ্যগুলো গ্রুপ করা হয়েছে এবং প্রতিটি গ্রুপের পণ্যগুলোর নাম ও মূল্য দেখানো হয়েছে।
এখানে Average, Sum, Count ইত্যাদি অ্যাগ্রিগেট ফাংশন ব্যবহার করা হয়েছে।
// মোট মূল্য বের করা
decimal totalPrice = products.Sum(p => p.Price);
Console.WriteLine($"Total Price of all products: {totalPrice}");
// গড় মূল্য বের করা
decimal averagePrice = products.Average(p => p.Price);
Console.WriteLine($"Average Price of products: {averagePrice}");
// পণ্যের সংখ্যা বের করা
int productCount = products.Count();
Console.WriteLine($"Total number of products: {productCount}");
আউটপুট:
Total Price of all products: 113
Average Price of products: 22.6
Total number of products: 5
এখানে পণ্যের দাম অনুযায়ী পণ্যগুলো সাজানো হয়েছে।
var sortedProducts = from product in products
orderby product.Price descending
select product;
foreach (var product in sortedProducts)
{
Console.WriteLine($"Product: {product.ProductName}, Price: {product.Price}");
}
আউটপুট:
Product: Product2, Price: 30
Product: Product4, Price: 25
Product: Product1, Price: 20.5
Product: Product5, Price: 12
Product: Product3, Price: 15.5
এখানে Price অনুযায়ী পণ্যগুলো DESCENDING (অবনমিত) অর্ডারে সাজানো হয়েছে।
ধরা যাক, আপনার কোলেকশনে কিছু ডুপ্লিকেট পণ্য আছে এবং আপনি সেগুলো ফিল্টার করতে চান।
var distinctCategories = (from product in products
select product.Category).Distinct();
Console.WriteLine("Distinct Categories:");
foreach (var category in distinctCategories)
{
Console.WriteLine(category);
}
আউটপুট:
Distinct Categories:
Category1
Category2
এখানে Distinct ব্যবহার করে পণ্যের ক্যাটেগরিগুলো এককভাবে বের করা হয়েছে।
LINQ to Object Collections একটি শক্তিশালী টুল যা ডেভেলপারদের তাদের কাস্টম অবজেক্ট কোলেকশনে কুয়েরি চালানোর ক্ষমতা দেয়। এটি একাধিক কোলেকশন অপারেশন যেমন ফিল্টারিং, গ্রুপিং, অ্যাগ্রিগেটিং, সাজানো এবং ডুপ্লিকেট রিমুভ করার কাজগুলো সহজ ও দ্রুত করে তোলে। LINQ একটি declarative পদ্ধতি প্রদান করে, যা কোডের গঠন পরিষ্কার এবং পাঠযোগ্য রাখে।
common.read_more